<?php
// +---------------------------------------------------
// | 雪花算法生成随机订单号场景定义
// +---------------------------------------------------
// | Author: liang 辰风沐阳 23426945@qq.com
// +---------------------------------------------------

declare(strict_types=1);

namespace app\common\logic;

use app\common\lib\Snowflake as LibSnowflake;

/**
 * 雪花算法生成订单号
 */
class Snowflake
{
    // +---------------------------------------------------
    // | 生成随机订单号场景
    // +---------------------------------------------------

    /**
     * 支付订单号
     */
    public static function pay()
    {
        return self::generate('SH');
    }

    /**
     * 提现订单号
     */
    public static function withdraw()
    {
        return self::generate('TX');
    }

    /**
     * 退款订单号
     */
    public static function refund()
    {
        return self::generate('RE');
    }

    // +---------------------------------------------------
    // | 公共方法
    // +---------------------------------------------------

    /**
     * 生成随机订单号
     */
    private static function generate(string $prefix = '')
    {
        $workId = mt_rand(1, 1023);
        return $prefix . LibSnowflake::getInstance()->setWorkId($workId)->nextId();
    }

    /**
     * 生成指定场景的订单号
     *
     * @param int $scene
     */
    public static function ordersn(int $scene)
    {
        $prefix = [1 => 'SH', 2 => 'VIP'];
        $value = $prefix[$scene] ?? fault('该订单号场景不存在');
        return self::generate($value);
    }
}
